#include <iostream>
#include <cstring>
#include <set>
using namespace std;

const int N = 110;

int n, a; //获取输入
int f[N]; //存储以前计算好的，优化计算结构
int res = 0;

int SG(int x)
{
    if (f[x] != -1)      //以前计算过
        return f[x];     //就直接放返回
    if (!x)              //如果不可再分
        return f[x] = 0; //那就按照定义来
    set<int> ne_sg;
    for (int i = 0; i < x; ++i) //否则就是穷举所有可能的拆分
        for (int j = 0; j < x; ++j)
            ne_sg.insert(SG(i) ^ SG(j)); //按照拓展定义，将拆分后的进行异或并且加入集合
    //接下来就是熟悉的mex操作
    for (int i = 0;; ++i)
        if (!ne_sg.count(i))
            return f[x] = i;
}

int main()
{
    freopen("cin.txt", "r", stdin);
    memset(f, -1, sizeof f);
    cin >> n;
    while (n--)
    {
        cin >> a;
        res ^= SG(a);
    }
    if (res)
        cout << "Yes";
    else
        cout << "No";
    return 0;
}